A register file is a high speed storage structure that is used to temporarily store information. Processors typically include one or more register files, to maintain data or instructions relatively close to the processor core. Register files often serve as a primary source of data for use by a processor's execution resources, and high performance processors often include large register files, to take advantage of their low access latency.
Register management techniques allocate registers to processes, fill the registers from slower storage media, and later empty the registers to other storage media as registers are reallocated to other procedures or functions. For example, data from registers used by a first function may be transferred to other storage, while the first function is inactive, if an active second function requires more registers than are currently available. When control is returned to the first function, registers can be reallocated, although they will typically not be the same registers as used by the function during prior activity. To restore activity for the function, the stored data is loaded into the newly allocated registers from storage. To achieve high instruction/cycle (IPC) throughput, modern processors, such as microprocessors and parallelizing compilers, efficient register renaming, register usage, and passing of function parameters are considerations.
Many devices and applications that utilize microprocessors or compilers or the like have low power requirements. Commonly the register file in processors is a major consumer of power due its large number of ports and high speed. In some processors, this is exacerbated by the large number of registers. Furthermore, as transistor technology shrinks, leakage power—present even in un-accessed portions of the register file—becomes more significant. Commonly, processors provide power to all registers in sets all of the time. Often, unused portions of the register file are deliberately not shut off because these registers hold values that could be used at any time, and would be lost if the registers were powered down.
There is continuing need to design processors that require lower power, for example, for application to portable/handheld devices or other applications that have limited or restricted power sources. In support of this general need, there is a specific need for techniques to reduce the power consumed by the groups of registers of a processor, such as the stacked register file.